/*
反射获取注解
既然我们的注解可以保留到运行时，那么我们来看看，如何使用反射获取注解
 */
package MyAnnotation;

import java.lang.annotation.Annotation;

public class Main {
    public static void main(String[] args) throws NoSuchMethodException {
        Class<Student> clazz = Student.class;  //获取Student的类对象
        for (Annotation annotation : clazz.getAnnotations()){  //从类对象中循环获取注解，赋值给annotation
            System.out.println(annotation.annotationType());  //注解的类型
            System.out.println(annotation instanceof Test);  //判断注解是否为Test
            Test test = (Test) annotation;  //把注解转换为Test类型
            System.out.println(test.value());  //获取我们在注解中写入的内容
            System.out.println(test.value2());  //获取我们在注解中写入的内容
        }

        for (Annotation annotation2 : clazz.getMethod("test666").getAnnotations()){ //写main方法会报错
            System.out.println(annotation2.annotationType());
            System.out.println(annotation2 instanceof Test);  //判断注解是否为Test
            Test test2 = (Test) annotation2;
            System.out.println(test2.value2());
            System.out.println(test2.value3());  //获取到的是个数组
        }

        //我们发现，无论是方法、类、还是字段，都可以使用getAnnotation()方法（还有几个同名的）来快速获取我们标记的注解
        //所以说，获取注解有啥用。以后用到Spring和Springboot大型框架的时候，就能感受到注解的魅力了。
    }
}
